#pragma once

#ifndef PCH_ENABLED
	#include <cmath>
#endif

#include <QCommandLineOption>
#include <QCommandLineParser>

namespace commandline
{

	class Parser;

	/* Note, this class and all it's derivatives store the validated results for caching. This means that unlike the
	 * regular QCommandLineOption it is _not_ idempotent! */
	class Option : public QCommandLineOption
	{
	public:
		Option(const QString& name,
			const QString& description = QString(),
			const QString& valueName = QString(),
			const QString& defaultValue = QString()
		);

		Option(const QStringList& names,
			const QString& description = QString(),
			const QString& valueName = QString(),
			const QString& defaultValue = QString()
		);

		Option(const QCommandLineOption& other);

		virtual bool validate(Parser& parser, QString& value);
		QString name() const;
		QString getError() const;
		QString value(Parser& parser) const;

		virtual ~Option();

	protected:
		QString _error;
	};

}

